function [besttau,bestlambda]=CHlogit(tau,lambda,row,column,freq)

levR{1}=1/3*ones(1,3);
levC{1}=1/3*ones(1,3);

eps=0.0001;
n=length(row);
r=length(tau);
s=length(lambda);
all=cell(1,r);
ErrLK=zeros(r,s);
for q=1:r
    for u=1:s
    t=tau(q);
    l=lambda(u);
    for g=1:n
        ExpPayoffR=levR{1}*row{g}';
        levR{2}=zeros(1,3);
        for j=1:3
            levR{2}(j)=exp(l*ExpPayoffR(j))/(exp(l*ExpPayoffR(1))+exp(l*ExpPayoffR(2))+exp(l*ExpPayoffR(3)));
        end
        ExpPayoffC=levC{1}*column{g};
        levC{2}=zeros(1,3);
        for j=1:3
            levC{2}(j)=exp(l*ExpPayoffC(j))/(exp(l*ExpPayoffC(1))+exp(l*ExpPayoffC(2))+exp(l*ExpPayoffC(3)));
        end
        
        for k=2:7
            w=poisspdf(0:k-1,t)/sum(poisspdf(0:k-1,t));
            
            mixR=w(1).*levC{1};
            for j=2:k
                mixR=mixR+w(j)*levC{j};
            end
            
            ExpPayoffR=mixR*row{g}';
            levR{k+1}=zeros(1,3);
            for j=1:3
                levR{k+1}(j)=exp(l*ExpPayoffR(j))/(exp(l*ExpPayoffR(1))+exp(l*ExpPayoffR(2))+exp(l*ExpPayoffR(3)));
            end
        
            mixC=w(1).*levR{1};
            for j=2:k
                mixC=mixC+w(j)*levR{j};
            end
            
            ExpPayoffC=mixC*column{g};
            levC{k+1}=zeros(1,3);
            for j=1:3
                levC{k+1}(j)=exp(l*ExpPayoffC(j))/(exp(l*ExpPayoffC(1))+exp(l*ExpPayoffC(2))+exp(l*ExpPayoffC(3)));
            end
        end
        all{q}(g,:)=poisspdf(0,t)*levR{1};
        for k=1:7
            all{q}(g,:)=all{q}(g,:)+poisspdf(k,t)*levR{k+1};
        end
    end
    
    errLK=zeros(n,1);
    for i=1:n
        errLK(i)=freq(i,1)*log((freq(i,1)+eps)/all{q}(i,1))+freq(i,2)*log((freq(i,2)+eps)/all{q}(i,2))+freq(i,3)*log((freq(i,3)+eps)/all{q}(i,3));
    end
    ErrLK(q,u)=mean(errLK);
    end
end

[besttau,bestlambda]=find(ErrLK==min(min(ErrLK)));